" 开启文件类型检测
filetype on
" 根据检测到的类型加载不同的插件
filetype plugin on
" 自适应不同语言的智能缩进
filetype indent on

"让配置文件的更改立即生效
autocmd BufWritePost ${MYVIMRC} source ${MYVIMRC}

" 开启实时搜索功能
set incsearch
" 搜索时大小写不敏感
set ignorecase
" 高亮显示搜索结果
set hlsearch

set backspace=indent,eol,start
" vim 自身命令行模式智能补全
set wildmenu

" 总是显示状态栏
set laststatus=2
" 显示光标当前位置
set ruler
" 开启行号显示
set number
" 高亮显示当前行/列
set cursorline
"set cursorcolumn

" 开启语法高亮功能
syntax enable
" 允许用指定语法高亮配色方案替换默认方案
syntax on
"syntax off

set re=1
set ttyfast
set lazyredraw

" C++11 lambda表达式的缩进
set cino+=j1,(0,ws,Ws " enable partial c++11 (lambda) support

" 设置配色和主题方案
set t_Co=256
let g:molokai_original = 1
let g:rehash256 = 1
colorscheme molokai

" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 设置格式化时制表符占用空格数
set shiftwidth=4
" 让 vim 把连续数量的空格视为一个制表符
set softtabstop=4
" 关闭兼容模式
set nocompatible

" 基于缩进或语法进行代码折叠
set foldmethod=indent
"set foldmethod=syntax
" 启动 vim 时关闭折叠代码
set nofoldenable
"za，打开或关闭当前折叠；zM，关闭所有折叠；zR，打开所有折叠

" 记录上次离开文件的位置
if has("autocmd")
    au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif 
endif

" quickfix窗口设置
" nnoremap <silent> C :cclose<cr>
" au FileType qf call AdjustWindowHeight(5, 10)
"function! AdjustWindowHeight(minheight, maxheight)
"    exe max([min([line("$"), a:maxheight]), a:minheight]) . "wincmd _"
"endfunction
"总是将quickfix窗口放在最下面
"au FileType qf wincmd J

" 兼容tmux
if exists('$TMUX')
    set term=screen-256color
    set ttimeoutlen=20
elseif &ttimeoutlen > 60 || &ttimeoutlen <= 0
    set ttimeoutlen=60
endif

" 查找内容
nnoremap <C-F> :grep --include="*.cpp" -Rn "<C-R><C-W>" ./
inoremap <C-F> <ESC> :grep --include="*.cpp" -Rn "<C-R><C-W>" ./

" 键位映射
inoremap <c-e> <End>
inoremap <c-a> <Home>
nnoremap <c-e> <End>
nnoremap <c-a> <Home>
inoremap <c-h> <Left>
inoremap <c-l> <Right>
inoremap <c-j> <Down>
inoremap <c-k> <Up>
